/**
 * MatrizPerfiles.java
 */

 /**
 *  AdSec: Administrador de Secundarias
 *  Copyright (C) 2009 Daniela Ramírez Chaves (dannyrch@gmail.com)
 *  Copyright (C) 2009 Leonel Salazar Valverde (leo87sv@gmail.com)
 *
 *  This file is part of AdSec.
 *  AdSec is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  AdSec is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with AdSec.  If not, see <http://www.gnu.org/licenses/>.
 */

package adsec.presentacion;

import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JCheckBox;
import javax.swing.JPanel;
import adsec.entidades.Perfil;
import adsec.entidades.Permiso;


public class MatrizPerfiles extends JPanel implements ItemListener{

    private JCheckBox [][] matrizCheckbox;
    private JCheckBox [] chbModulos;
    private JCheckBox [] chbAcciones;
    private JCheckBox chbTodos;
    private final String [] nombresModulos =
    {
        "<html>Estudiantes</html>",
        "<html>Responsables</html>",
        "<html>Materias Matriculas</html>",
        "<html>Registro de Notas</html>",
        "<html>Docentes</html>",
        "<html>Docente Imparte</html>",
        "<html>Matrícula</html>",
        "<html>Niveles y<br>Secciones<html>",
        "<html>Materias</html>",
        "<html>Asistencia</html>",
        "<html>Personal<br/>Administrativo</html>",
        "<html>Comité</html>",
        "<html>Configuración<br/>Ciclo Lectivo</html>",
        "<html>Usuarios</html>",
        "<html>Perfiles</html>",
        "<html>Reportes</html>"
    };
    private final String [] nombresAcciones = {
        "<html>Insertar</html>", "<html>Modificar</html>",
        "<html>Eliminar</html>", "<html>Consultar</html>"};
    private final int cantidadModulos = nombresModulos.length;
    private GridLayout gridLayout;
    private Dimension tamaño;
    

    public MatrizPerfiles(){
        this.initComponents();
        this.doLayout();
    }

    private void initComponents(){
        tamaño = new Dimension(600, 500);
        this.setSize(this.tamaño);
        this.setPreferredSize(this.tamaño);
        gridLayout = new GridLayout(cantidadModulos+1, nombresAcciones.length+1);
        this.setLayout(gridLayout);
        chbModulos = new JCheckBox[cantidadModulos];
        chbAcciones = new JCheckBox[this.nombresAcciones.length];
        matrizCheckbox = new JCheckBox[cantidadModulos][this.nombresAcciones.length];

        for(int indice = 0; indice < chbModulos.length; indice++){
            chbModulos[indice] = new JCheckBox(this.nombresModulos[indice]);
            chbModulos[indice].addItemListener(this);
        }

        //JCheckBox para selecionar todos los módulos
        this.chbTodos = new JCheckBox("<html>Todas</html>");
        this.add(this.chbTodos);
        this.chbTodos.addItemListener(this);
        for(int indice = 0; indice < chbAcciones.length; indice++){
            chbAcciones[indice] = new JCheckBox(this.nombresAcciones[indice]);
            chbAcciones[indice].addItemListener(this);
            this.add(chbAcciones[indice]);
        }

        for(int fila = 0; fila < cantidadModulos; fila++){
            this.add(chbModulos[fila]);
            for(int columna = 0; columna < nombresAcciones.length; columna++){
                matrizCheckbox[fila][columna] = new JCheckBox();
                matrizCheckbox[fila][columna].setEnabled(false);
                this.add(matrizCheckbox[fila][columna]);
            }//fin de for fila
        }//fin de for fila
        this.setBorder(javax.swing.BorderFactory.createTitledBorder("Permisos"));

    }//fin de método initComponents

    public void itemStateChanged(ItemEvent evento) {
        JCheckBox fuente = (JCheckBox) evento.getSource();
        boolean encontrado = false;
        //Revisar si se selecciono el checkbox para todos los módulos
        if(fuente == this.chbTodos){
            for(int fila = 0; fila < this.chbModulos.length; fila++){
                for(int columna = 0; columna < this.chbAcciones.length; columna++){
                    matrizCheckbox[fila][columna].setSelected(fuente.isSelected());
                }
            }
            encontrado = true;
        }else{
            //Se revisa si fue seleccionado un checkbox de alguna acción de IMEC
            for(int indice = 0; indice < this.chbAcciones.length; indice++){
                if(fuente == this.chbAcciones[indice]){
                    for(int fila = 0; fila < this.chbModulos.length; fila++){
                        matrizCheckbox[fila][indice].setSelected(fuente.isSelected());
                    }
                    encontrado = true;
                }//fin de if
            }//fin de for

            //si no fue a una acción nos fijamos si fue en los módulos
            if(!encontrado){
                for(int indice = 0; indice < this.chbModulos.length; indice++){
                    if(fuente ==this.chbModulos[indice] ){
                        for(int columna = 0; columna < this.chbAcciones.length; columna++){
                            matrizCheckbox[indice][columna].setSelected(fuente.isSelected());
                        }
                        encontrado = true;
                    }//fin de if
                }//fin de for
            }//fin de if
        }
    }//fin de stateChanged

    public boolean getIsSelected(int fila, int columna){
        boolean seleccionado = false;
        if(fila >= 0 && fila < this.cantidadModulos &&
                columna >= 0 && columna < this.nombresAcciones.length){
                seleccionado = this.matrizCheckbox[fila][columna].isSelected();
        }//fin de if
        return seleccionado;
    }//fin de getIsSelected

    public void setSelected(int fila, int columna, boolean habilitar){
        if(fila >= 0 && fila < this.cantidadModulos &&
                columna >= 0 && columna < this.nombresAcciones.length){
                this.matrizCheckbox[fila][columna].setSelected(habilitar);
        }//fin de if
    }//fin de setEnabled

    public void setEnabled(int fila, int columna, boolean habilitar){
        if(fila >= 0 && fila < this.cantidadModulos &&
                columna >= 0 && columna < this.nombresAcciones.length){
                this.matrizCheckbox[fila][columna].setEnabled(habilitar);
        }//fin de if
    }//fin de setEnabled

    public void habilitarCampos(boolean habilitar){
        this.chbTodos.setEnabled(habilitar);
        for(int indice = 0; indice < this.chbModulos.length; indice++){
            this.chbModulos[indice].setEnabled(habilitar);
        }
        for(int indice = 0; indice < this.chbAcciones.length; indice++){
            this.chbAcciones[indice].setEnabled(habilitar);
        }
    }//fin de habilitarCampos

    public void limpiarCampos(){
        for(int indice = 0; indice < this.chbModulos.length; indice++){
            this.chbModulos[indice].setSelected(false);
        }
        for(int indice = 0; indice < this.chbAcciones.length; indice++){
            this.chbAcciones[indice].setSelected(false);
        }
    }//fin de limpiarCampos

    public int getFilas(){
        return this.cantidadModulos;
    }

    public int getColumnas(){
        return this.nombresAcciones.length;
    }

    public Perfil llenarPermisos(Perfil perfil){
        perfil.setPermEstudiantes(new Permiso(
                this.matrizCheckbox[0][0].isSelected(),
                this.matrizCheckbox[0][1].isSelected(),
                this.matrizCheckbox[0][2].isSelected(),
                this.matrizCheckbox[0][3].isSelected()
                ));
        perfil.setPermResponsable(new Permiso(
                this.matrizCheckbox[1][0].isSelected(),
                this.matrizCheckbox[1][1].isSelected(),
                this.matrizCheckbox[1][2].isSelected(),
                this.matrizCheckbox[1][3].isSelected()
                ));
        perfil.setPermMateriasMatriculadas(new Permiso(
                this.matrizCheckbox[2][0].isSelected(),
                this.matrizCheckbox[2][1].isSelected(),
                this.matrizCheckbox[2][2].isSelected(),
                this.matrizCheckbox[2][3].isSelected()
                ));
        perfil.setPermRegistroNotas(new Permiso(
                this.matrizCheckbox[3][0].isSelected(),
                this.matrizCheckbox[3][1].isSelected(),
                this.matrizCheckbox[3][2].isSelected(),
                this.matrizCheckbox[3][3].isSelected()
                ));
        perfil.setPermDocentes(new Permiso(
                this.matrizCheckbox[4][0].isSelected(),
                this.matrizCheckbox[4][1].isSelected(),
                this.matrizCheckbox[4][2].isSelected(),
                this.matrizCheckbox[4][3].isSelected()
                ));
        perfil.setPermDocenteImparte(new Permiso(
                this.matrizCheckbox[5][0].isSelected(),
                this.matrizCheckbox[5][1].isSelected(),
                this.matrizCheckbox[5][2].isSelected(),
                this.matrizCheckbox[5][3].isSelected()
                ));
        perfil.setPermMatricula(new Permiso(
                this.matrizCheckbox[6][0].isSelected(),
                this.matrizCheckbox[6][1].isSelected(),
                this.matrizCheckbox[6][2].isSelected(),
                this.matrizCheckbox[6][3].isSelected()
                ));
        perfil.setPermNivelesSecciones(new Permiso(
                this.matrizCheckbox[7][0].isSelected(),
                this.matrizCheckbox[7][1].isSelected(),
                this.matrizCheckbox[7][2].isSelected(),
                this.matrizCheckbox[7][3].isSelected()
                ));
        perfil.setPermMaterias(new Permiso(
                this.matrizCheckbox[8][0].isSelected(),
                this.matrizCheckbox[8][1].isSelected(),
                this.matrizCheckbox[8][2].isSelected(),
                this.matrizCheckbox[8][3].isSelected()
                ));
        perfil.setPermAsistencia(new Permiso(
                this.matrizCheckbox[9][0].isSelected(),
                this.matrizCheckbox[9][1].isSelected(),
                this.matrizCheckbox[9][2].isSelected(),
                this.matrizCheckbox[9][3].isSelected()
                ));
        perfil.setPermPersonalAdm(new Permiso(
                this.matrizCheckbox[10][0].isSelected(),
                this.matrizCheckbox[10][1].isSelected(),
                this.matrizCheckbox[10][2].isSelected(),
                this.matrizCheckbox[10][3].isSelected()
                ));
        perfil.setPermComite(new Permiso(
                this.matrizCheckbox[11][0].isSelected(),
                this.matrizCheckbox[11][1].isSelected(),
                this.matrizCheckbox[11][2].isSelected(),
                this.matrizCheckbox[11][3].isSelected()
                ));
        perfil.setPermConfiguracion(new Permiso(
                this.matrizCheckbox[12][0].isSelected(),
                this.matrizCheckbox[12][1].isSelected(),
                this.matrizCheckbox[12][2].isSelected(),
                this.matrizCheckbox[12][3].isSelected()
                ));
        perfil.setPermUsuario(new Permiso(
                this.matrizCheckbox[13][0].isSelected(),
                this.matrizCheckbox[13][1].isSelected(),
                this.matrizCheckbox[13][2].isSelected(),
                this.matrizCheckbox[13][3].isSelected()
                ));
        perfil.setPermPerfiles(new Permiso(
                this.matrizCheckbox[14][0].isSelected(),
                this.matrizCheckbox[14][1].isSelected(),
                this.matrizCheckbox[14][2].isSelected(),
                this.matrizCheckbox[14][3].isSelected()
                ));
        perfil.setPermReportes(new Permiso(
                this.matrizCheckbox[15][0].isSelected(),
                this.matrizCheckbox[15][1].isSelected(),
                this.matrizCheckbox[15][2].isSelected(),
                this.matrizCheckbox[15][3].isSelected()
                ));
        return perfil;
    }//fin de llenarPermisos

    public void cargarPerfil(Perfil perfil){
		this.limpiarCampos();
        //Cargar permisos Estudiantes
        this.matrizCheckbox[0][0].setSelected(perfil.getPermEstudiantes().isInsertar());
        this.matrizCheckbox[0][1].setSelected(perfil.getPermEstudiantes().isModificar());
        this.matrizCheckbox[0][2].setSelected(perfil.getPermEstudiantes().isEliminar());
        this.matrizCheckbox[0][3].setSelected(perfil.getPermEstudiantes().isConsultar());
        //Cargar permisos Responsables
        this.matrizCheckbox[1][0].setSelected(perfil.getPermResponsable().isInsertar());
        this.matrizCheckbox[1][1].setSelected(perfil.getPermResponsable().isModificar());
        this.matrizCheckbox[1][2].setSelected(perfil.getPermResponsable().isEliminar());
        this.matrizCheckbox[1][3].setSelected(perfil.getPermResponsable().isConsultar());
        //Cargar permisos Materias Matriculadas
        this.matrizCheckbox[2][0].setSelected(perfil.getPermMateriasMatriculadas().isInsertar());
        this.matrizCheckbox[2][1].setSelected(perfil.getPermMateriasMatriculadas().isModificar());
        this.matrizCheckbox[2][2].setSelected(perfil.getPermMateriasMatriculadas().isEliminar());
        this.matrizCheckbox[2][3].setSelected(perfil.getPermMateriasMatriculadas().isConsultar());
        //Cargar permisos Registro Notas
        this.matrizCheckbox[3][0].setSelected(perfil.getPermRegistroNotas().isInsertar());
        this.matrizCheckbox[3][1].setSelected(perfil.getPermRegistroNotas().isModificar());
        this.matrizCheckbox[3][2].setSelected(perfil.getPermRegistroNotas().isEliminar());
        this.matrizCheckbox[3][3].setSelected(perfil.getPermRegistroNotas().isConsultar());
        //Cargar permisos Docentes
        this.matrizCheckbox[4][0].setSelected(perfil.getPermDocentes().isInsertar());
        this.matrizCheckbox[4][1].setSelected(perfil.getPermDocentes().isModificar());
        this.matrizCheckbox[4][2].setSelected(perfil.getPermDocentes().isEliminar());
        this.matrizCheckbox[4][3].setSelected(perfil.getPermDocentes().isConsultar());
        //Cargar permisos Docente Imparte
        this.matrizCheckbox[5][0].setSelected(perfil.getPermDocenteImparte().isInsertar());
        this.matrizCheckbox[5][1].setSelected(perfil.getPermDocenteImparte().isModificar());
        this.matrizCheckbox[5][2].setSelected(perfil.getPermDocenteImparte().isEliminar());
        this.matrizCheckbox[5][3].setSelected(perfil.getPermDocenteImparte().isConsultar());
        //Cargar permisos Matrícula
        this.matrizCheckbox[6][0].setSelected(perfil.getPermMatricula().isInsertar());
        this.matrizCheckbox[6][1].setSelected(perfil.getPermMatricula().isModificar());
        this.matrizCheckbox[6][2].setSelected(perfil.getPermMatricula().isEliminar());
        this.matrizCheckbox[6][3].setSelected(perfil.getPermMatricula().isConsultar());
        //Cargar permisos Niveles y Secciones
        this.matrizCheckbox[7][0].setSelected(perfil.getPermNivelesSecciones().isInsertar());
        this.matrizCheckbox[7][1].setSelected(perfil.getPermNivelesSecciones().isModificar());
        this.matrizCheckbox[7][2].setSelected(perfil.getPermNivelesSecciones().isEliminar());
        this.matrizCheckbox[7][3].setSelected(perfil.getPermNivelesSecciones().isConsultar());
        //Cargar permisos Materias
        this.matrizCheckbox[8][0].setSelected(perfil.getPermMaterias().isInsertar());
        this.matrizCheckbox[8][1].setSelected(perfil.getPermMaterias().isModificar());
        this.matrizCheckbox[8][2].setSelected(perfil.getPermMaterias().isEliminar());
        this.matrizCheckbox[8][3].setSelected(perfil.getPermMaterias().isConsultar());
        //Cargar permisos Asistencia
        this.matrizCheckbox[9][0].setSelected(perfil.getPermAsistencia().isInsertar());
        this.matrizCheckbox[9][1].setSelected(perfil.getPermAsistencia().isModificar());
        this.matrizCheckbox[9][2].setSelected(perfil.getPermAsistencia().isEliminar());
        this.matrizCheckbox[9][3].setSelected(perfil.getPermAsistencia().isConsultar());
        //Cargar permisos Personal Adm
        this.matrizCheckbox[10][0].setSelected(perfil.getPermPersonalAdm().isInsertar());
        this.matrizCheckbox[10][1].setSelected(perfil.getPermPersonalAdm().isModificar());
        this.matrizCheckbox[10][2].setSelected(perfil.getPermPersonalAdm().isEliminar());
        this.matrizCheckbox[10][3].setSelected(perfil.getPermPersonalAdm().isConsultar());
        //Cargar permisos Comité
        this.matrizCheckbox[11][0].setSelected(perfil.getPermComite().isInsertar());
        this.matrizCheckbox[11][1].setSelected(perfil.getPermComite().isModificar());
        this.matrizCheckbox[11][2].setSelected(perfil.getPermComite().isEliminar());
        this.matrizCheckbox[11][3].setSelected(perfil.getPermComite().isConsultar());
        //Cargar permisos Configuración
        this.matrizCheckbox[12][0].setSelected(perfil.getPermConfiguracion().isInsertar());
        this.matrizCheckbox[12][1].setSelected(perfil.getPermConfiguracion().isModificar());
        this.matrizCheckbox[12][2].setSelected(perfil.getPermConfiguracion().isEliminar());
        this.matrizCheckbox[12][3].setSelected(perfil.getPermConfiguracion().isConsultar());
        //Cargar permisos Usuario
        this.matrizCheckbox[13][0].setSelected(perfil.getPermUsuario().isInsertar());
        this.matrizCheckbox[13][1].setSelected(perfil.getPermUsuario().isModificar());
        this.matrizCheckbox[13][2].setSelected(perfil.getPermUsuario().isEliminar());
        this.matrizCheckbox[13][3].setSelected(perfil.getPermUsuario().isConsultar());
        //Cargar permisos Perfiles
        this.matrizCheckbox[14][0].setSelected(perfil.getPermPerfiles().isInsertar());
        this.matrizCheckbox[14][1].setSelected(perfil.getPermPerfiles().isModificar());
        this.matrizCheckbox[14][2].setSelected(perfil.getPermPerfiles().isEliminar());
        this.matrizCheckbox[14][3].setSelected(perfil.getPermPerfiles().isConsultar());
        //Cargar permisos Reportes
        this.matrizCheckbox[15][0].setSelected(perfil.getPermReportes().isInsertar());
        this.matrizCheckbox[15][1].setSelected(perfil.getPermReportes().isModificar());
        this.matrizCheckbox[15][2].setSelected(perfil.getPermReportes().isEliminar());
        this.matrizCheckbox[15][3].setSelected(perfil.getPermReportes().isConsultar());
    }//finde cargarPerfil

}//fin de clase MatrizPerfiles
